package cn.ainit.sys.framework;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

import cn.ainit.sys.ds.cloumns.sysCloumns;
import cn.ainit.sys.dz.entity.SysDzSource;
import cn.ainit.sys.framework.entity.ColnPerms;
import cn.ainit.sys.framework.entity.SysButtons;
import cn.ainit.sys.framework.entity.SysColumns;
import cn.ainit.sys.pages.config.entity.ConfigObject;
import cn.ainit.sys.print.entity.SysPrint;
import cn.ainit.sys.query.datastore.DataStore;
import cn.ainit.sys.query.entity.QueryJson;

public interface FrameworkService {
	/**
	 * 根据按钮的组ID查询所有的按钮
	 * @param butnId  按钮的组ID
	 * @return
	 * @throws Exception
	 */
	List<SysButtons> butnList(String butnId) throws Exception;
	
	/***
	 * 根据dsId得到所有的查询所有的类型的打印
	 * @param dsId
	 * @return
	 * @throws Exception
	 */
	List<SysPrint> printList(String dsId) throws Exception;
	
	/**
	 * 根据colId和flag查询相应的列
	 * @param colId  列的组ID
	 * @param flag   判断是否全部查出来的列或者是一部分的列
	 * @return    返回列的List
	 * @throws Exception
	 */
	List<SysColumns> colList(String colId,String flag) throws Exception;
	/**
	  * 根据添加的sql查询出数据
	  * @param sqlText
	  * @return
	  * @throws Exception
	  */
	Object queryRowsBySql(String sqlText) throws Exception;
	
	/***
	 * 通过id获取
	 * @param dsid
	 * @return
	 * @throws Exception
	 */
	DataStore getDataStoreById(String dsid) throws Exception;
	/***
	 * 更新表中数据
	 * @param sqlText
	 * @param valuesArr
	 * @param whereValue
	 * @return
	 * @throws Exception
	 */
	boolean updateObject(String sqlText, String[] valuesArr, String[] whereValue) throws Exception;
	/**
	 * 弹出选题计划的窗口之前执行的存储过程
	 * @param id
	 * @param otherParam
	 * @return
	 * @throws Exception
	 */
	boolean execLink(String id,String otherParam) throws Exception;
	/***
	 * 更新数据
	 * @param sqlText
	 * @param page
	 * @param rows
	 * @return
	 * @throws Exception
	 */
	QueryJson queryRowsBySqlPagination(String sqlText, int cpage, int rows) throws Exception;
	/**
	 * 获取主键值
	 * @param sql
	 * @return
	 * @throws Exception
	 */
	String getMaxPkStr(String sql) throws Exception;
	/***
	 * 保存对象sql
	 * @param sqlText
	 * @param valuesArr
	 * @return
	 * @throws Exception
	 */
	boolean saveObject(String sqlText, String[] valuesArr) throws Exception;
	/***
	 * 加载字段界面字段 V2.0
	 * @param colId
	 * @param type
	 * @param flag
	 * @return
	 * @throws Exception
	 * @author Xuzq
	 * @date 2014-3-10 上午11:14:21
	 */
	List loadColumnsU(String colId, String type, String flag ,String uid) throws Exception;
	/**
	 * 执行sql返回List
	 * @param sql
	 * @return
	 * @throws Exception
	 * @author wyang
	 * @date : 2014-4-16 下午02:19:22
	 */
	List execSql(String sql) throws Exception;
	/***
	 * 查询界面的sql拼接
	 * @param sqlText
	 * @param string
	 * @return
	 * @throws Exception
	 * @author Xuzq
	 * @param string 
	 * @date 2014-4-23 上午09:29:36
	 */
	String formatSql(String dsid,String sqlText, String uid) throws Exception;
	/**
	 * 详情界面的sql拼接
	 * @param dsid
	 * @param sqlText
	 * @param uid
	 * @return
	 * @throws Exception
	 * @author Xuzq
	 * @date 2014-5-20 下午04:34:32
	 */
	String formatRowSql(String dsid,String sqlText, String uid) throws Exception;
	/**
	 * 根据dsId和colName 查找确定的一列
	 * @param colName
	 * @param dsId
	 * @return
	 * @throws Exception
	 * @author wyang
	 * @date : 2014-5-21 下午02:20:01
	 */
	List onlyOneCloumn(String colName,String dsId) throws Exception;
	/**
	 * 查询所有是这个标志位的所有列
	 * @param lowFlag
	 * @return
	 * @throws Exception
	 * @author wyang
	 * @date : 2014-5-21 下午02:46:52
	 */
	List lowerColumns(String lowFlag,String dsId) throws Exception;
	/**
	 * 加载默认的对象
	 * @param dsid
	 * @return
	 * @throws Exception
	 * @author Xuzq
	 * @param session 
	 * @date 2014-5-22 上午09:40:21
	 */
	List queryDftRowByDsId(String flag,String dsid, HttpSession session) throws Exception;
	/**
	 * 传入sql  返回String
	 * @param sql
	 * @return
	 * @throws Exception
	 * @author wyang
	 * @date : 2014-6-14 下午05:08:43
	 */
	String execSqlForString(String sql) throws Exception;/**
	 * 根据sql返回一个对象
	 * @param sql
	 * @return
	 * @throws Exception
	 * @author wyang
	 * @date : 2014-6-16 上午10:02:00
	 */
	SysDzSource sqlForList(String sql) throws Exception;
	/**
	 * 根据dsID查询所有的列（sys_column）应用于一对多的列
	 * @param dsId
	 * @return
	 * @throws Exception
	 */
	public List<SysColumns> loadMulColumns(String dsId) throws Exception;
	
	/***
	 * 根据dsid和coluname查询SysColumns对象
	 * @param dsid
	 * @param coluname
	 * @return
	 * @throws Exception
	 */
	public SysColumns loadSysColumns(String dsid, String coluname)  throws Exception;
	
	

	/****
	 * 根据multiDsId找到对应的sys_dataStore 中的sqlTest然后一对多的外键的值查询数据
	 * @param multiDsId
	 * @param param1
	 * @return
	 */
	public List getMultiList(String dsId,String sinPkVal,String colName,String param1)  throws Exception;
	
	
	/*****
	 * 复制的时候如果一对多的数据不是拉取的那么就在一对多的表中生成新的dsId
	 * @param dsId
	 * @param colName
	 * @param oldSourceId
	 * @param newSouceId
	 * @return
	 * @throws Exception
	 */
	public String newSourceId(String dsId,String colName,String oldSourceId) throws Exception;
	/***
	 * 查询出一对多四个字段的属性
	 * @param dsid
	 * @param clnName
	 * @return
	 * @throws Exception
	 */
	SysColumns queryColumnsMul(String dsid, String clnName)throws Exception;

	/**
	 * 根据对照ID查找数据
	 * @param multiDzDsId
	 * @return
	 * @throws Exception
	 */
	SysDzSource loadDzSource(String multiDzDsId)throws Exception;
	
	
	/***
	 * 根据单据id,判断单据是否设置修改的权限设置
	 * @param djId
	 * @param param
	 * @return
	 * @throws Exception
	 * @author feifei
	 * @date: 2015-4-7 下午04:15:37 
	 */
	String dbcModifyPerms(String djId,String dsId,HttpSession session,String param) throws Exception;
	

	/***
	 * 根据单据id,判断单据是否设置列修改的权限设置
	 * @param djId
	 * @param param
	 * @return
	 * @throws Exception
	 * @author feifei
	 * @date: 2015-4-7 下午04:15:37 
	 */
	ColnPerms dbcModifyColnPerms(String djId,String dsId,HttpSession session,String param) throws Exception;

	String queryConditionSql(String dsId, String uid);

	/****
	 * 根据当前登录人 与 模块id(funcid) 检索出 列表界面的 按钮、默认条件、所有条件、grid表格列
	 * @param menuId
	 * @param uid
	 * @return
	 * @throws Exception
	 * @author feifei
	 * @date: 2015-5-12 下午03:43:58 
	 */
	public Map loadRightList(String funcId,String uid) throws Exception;
	
	/****
	 * 根据当前登录人\模块id(funcid)\主键id  检索出 详情界面的 按钮、详情界面要显示的列、不可改的列
	 * @param menuId
	 * @param uid
	 * @return
	 * @throws Exception
	 * @author feifei
	 * @date: 2015-5-12 下午03:43:58 
	 */
	public Map<String,List> loadAInfoList(String funcId,String uid,String djId) throws Exception;
	
	/**
	 * 获取记录总数
	 */
	int getCntBySql(String sql);
	
	/****
	 * 记录用户操作
	 * @return
	 * @throws Exception
	 */
	Boolean recordOperateLog(String sql) throws Exception;
	
}
